<?php
namespace App\Services\User;
use App\Services\User\Menu\MenuLogic;
/**
 * @Author: ws
 * @Date:   2018-06-12 16:23:45
 * @Last Modified by:   Marte
 */
class Menu
{
    // 增加一个顶级菜单
    public function addTop($data): array
    {   
        $data = init_array($data,['menu_cate_id'=>'0', 'name'=>' ', 'name_cn'=>' ', 'order'=>'100', 'type'=>'','url'=>'','merge_auth'=>'','auth_data'=>'{}', 'auth_id'=>'1']);
        ValidateMenu::checkValidate($data, ['menu_cate_id', 'name', 'name_cn', 'order', 'type', 'url', 'merge_auth', 'auth_data', 'auth_id']);
        return (new MenuLogic())->addTop($data);
    }
    // 增加一个非顶级菜单
    public function add($data): array
    {
        $data = init_array($data,['menu_cate_id'=>'0', 'name'=>' ', 'name_cn'=>' ', 'order'=>'100', 'type'=>'menu','url'=>'','merge_auth'=>'','auth_data'=>'{}','auth_id'=>'1','pid'=>'0','level'=>'1']);
        ValidateMenu::checkValidate($data, ['menu_cate_id', 'name', 'name_cn', 'order', 'type', 'url', 'merge_auth', 'auth_data', 'auth_id', 'pid', 'level']);
        return (new MenuLogic())->add($data);
    }
    // 获取某一菜单分类下的菜单树
    public function treeByCate($data): array
    {
        $data = init_array($data,['menu_cate_id'=>'0']);
        ValidateMenu::checkValidate($data, ['menu_cate_id']);
        return (new MenuLogic())->treeByCate($data);
    }
    // 移动某一菜单记录及其子记录到另一记录下
    public function move($data): array
    {
        $data = init_array($data,['id'=>'0', 'pid'=>'0']);
        ValidateMenu::checkValidate($data, ['id','pid']);
        return (new MenuLogic())->move($data);
    }
    // 禁用某一菜单记录
    /*public function stop($data): array
    {
        $data = $this->haveIssetReceiveData(['id'=>'0']);
        return $this->stepRun($data, 'stop', 'stop');
    }*/
    // 禁用某一菜单记录
   /* public function start($data): array
    {
        $data = $this->haveIssetReceiveData(['id'=>'0']);
        return $this->stepRun($data, 'start', 'start');
    }*/
    // 编辑某一菜单记录
    public function edit($data): array
    {
        if (!isset($data['name'])  && !isset($data['name_cn']) && !isset($data['menu_cate_id'])  && !isset($data['pid'])  && !isset($data['order'])  && !isset($data['level'])) {
            return verify_err($data, 'name,name_cn,menu_cate_id,pid,order,level至少要传一个');
        }
        $data = init_array($data,['id'=>'0', 'name'=>'', 'name_cn'=>'', 'menu_cate_id'=>'', 'pid'=>'','order'=>'', 'level'=>'']);
        ValidateMenu::checkValidate($data, ['id', 'name', 'name_cn', 'menu_cate_id', 'pid','order', 'level']);
        return (new MenuLogic())->edit($data);
    }
    // 获取某app_key对应的的所有树形菜单
    public function treeByAppKey($data): array
    {
        $data['app_key'] = $app_key = config('tpproject.yayi_admin_app_key');
        $data = init_array($data,['app_key'=>' ']);
        ValidateMenu::checkValidate($data, ['app_key']);
        return (new MenuLogic())->treeByAppKey($data);
    }
    // 为某一角色增加某一菜单的(展示权限) 仅是可展示,该菜单的功能能否被访问,取决于权限是否被允许
    public function addShowMenuAuthByRole($data): array
    {
        $data = init_array($data,['role_id'=>'0', 'menu_id'=>'0']);
        ValidateMenu::checkValidate($data, ['role_id','menu_id']);
        return (new MenuLogic())->addShowMenuAuthByRole($data);
    }
    // 为某一角色增加某一菜单及其子菜单的(展示权限) 仅是可展示,该菜单及其子菜单的功能能否被访问,取决于权限是否被允许
    public function addShowMenuAndChildren($data): array
    {
        $data = init_array($data,['role_id'=>'0', 'menu_id'=>'0']);
        ValidateMenu::checkValidate($data, ['role_id','menu_id']);
        return (new MenuLogic())->addShowMenuAndChildren($data);
    }
    // 获取某角色集某app_key应用下的树形菜单
   /* public function treeByRolesAndAppkey($data): array
    {
        $data = $this->haveIssetReceiveData(['roles'=>'', 'role_ids'=>'', 'app_key'=>' ']);
        if(array_eq($data, '', ['roles','role_ids'])){
            return verify_err($data, 'roles,role_ids至少要传一个');
        }
        return $this->stepRun($data, 'treeByRolesAndAppkey', 'treeByRolesAndAppkey');
    }*/
    // 停止某一角色某一菜单的(展示权限)
    public function stopShowMenuAuthByRole($data): array
    {
        if (!isset($data['id']) && (!isset($data['role_id']) || !isset($data['menu_id']))) {
            return verify_err($data, 'id或(menu_id,role_id)参数至少传一组');
        }
        $data = init_array($data,['id'=>'', 'role_id'=>'', 'menu_id'=>'']);
        ValidateMenu::checkValidate($data, ['id','role_id','menu_id']);
        return (new MenuLogic())->stopShowMenuAuthByRole($data);
    }
    // 启用某一角色某一菜单的(展示权限)
    public function startShowMenuAuthByRole($data): array
    {
        if (!isset($data['id']) && (!isset($data['role_id']) || !isset($data['menu_id']))) {
            return verify_err($data, 'id或(menu_id,role_id)参数至少传一组');
        }
        $data = init_array($data,['id'=>'', 'role_id'=>'', 'menu_id'=>'']);
        ValidateMenu::checkValidate($data, ['id','role_id','menu_id']);
        return (new MenuLogic())->startShowMenuAuthByRole($data);
    }
    // 停止某一角色某一菜单及其可用子菜单的(展示权限)
    public function stopShowMenuAndChildren($data): array
    { if (!isset($data['id']) && (!isset($data['role_id']) || !isset($data['menu_id']))) {
            return verify_err($data, 'id或(menu_id,role_id)参数至少传一组');
        }
        $data = init_array($data,['id'=>'', 'role_id'=>'', 'menu_id'=>'']);
        ValidateMenu::checkValidate($data, ['id','role_id','menu_id']);
        return (new MenuLogic())->stopShowMenuAndChildren($data);
    }
    // 启用某一角色某一菜单及其可用子菜单的(展示权限)
    public function startShowMenuAndChildren($data): array
    {
        if (!isset($data['id']) && (!isset($data['role_id']) || !isset($data['menu_id']))) {
            return verify_err($data, 'id或(menu_id,role_id)参数至少传一组');
        }
        $data = init_array($data,['id'=>'', 'role_id'=>'', 'menu_id'=>'']);
        ValidateMenu::checkValidate($data, ['id','role_id','menu_id']);
        return (new MenuLogic())->startShowMenuAndChildren($data);
    }

}
